'''
编写一个名为 printTable()的函数，它接受字符串的列表，将它显示在组织良好的表格中，
如下所示。假定所有内层列表都包含同样数目的字符串。

提示：
你的代码首先必须找到每个内层列表中最长的字符串，这样整列就有足够的宽度以放下所有字符串。
你可以将每一列的最大宽度，保存为一个整数的列表。printTable()函数的开始可以是 
colWidths = [0] * len(tableData)，这创建了一个列表，它包含了一些 0，
数目与 tableData 中内层列表的数目相同。这样，colWidths[0]就可以保存 
tableData[0]中最长字符串的宽度，colWidths[1]就可以保存 tableData[1]中最长字符串的宽度，
以此类推然后可以找到colWidths 列表中最大的值，
决定将什么整数宽度传递给rjust()字符串方法。
'''


def tablePrint(tableDate):
    # 确定每列的宽度
    columnWidth = []
    for k in range(len(tableDate)):  # 遍历二维列表每一行
        length = len(tableDate[k][0])
        for v in range(len(tableDate[0])):  # 找出列表这一行最长的元素
            if len(tableDate[k][v]) > length:
                length = len(tableDate[k][v])
        length += 1  # 包含空格
        columnWidth.append(length)  # 得到每一行的最大长度，存为一个列表


# 排版对齐  按列输出
    for k in range(len(tableDate[0])):
        new = tableDate[0][k].rjust(columnWidth[0]) + ' '  # 每行第一个右对齐
        for v in range(1, len(tableDate)):
            new = new + tableDate[v][k].ljust(columnWidth[v])  # 其余的左对齐
        print(new)


tableDateOne = [['apple', 'oranges', 'cherries', 'banana'],
                ['alice', 'bob', 'carol', 'david'],
                ['dogs', 'cats', 'moose', 'goose']]
tablePrint(tableDateOne)
